<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
        原型对象
        在 JavaScript 中，原型（prototype）是一个非常重要的概念，它为对象提供了继承和共享属性的机制。
        每个 JavaScript 对象都有一个与之关联的原型对象，通过原型对象，可以实现属性和方法的共享，从而减少内存占用。
        所有的 JavaScript 对象都会从一个 prototype（原型对象）中继承属性和方法。

       原型是一个对象，它是其他对象的模板或蓝图。
       当一个对象试图访问一个属性或方法时，如果在该对象自身没有找到，JavaScript 会沿着原型链向上查找，
       直到找到对应的属性或方法，或者达到原型链的顶端 null 为止。

       每个 JavaScript 对象（除了 null）都自动拥有一个隐藏的属性 __proto__，
       它指向该对象的原型对象。这个 __proto__ 是实现继承的关键：

       构造函数和原型
      当你使用构造函数创建一个对象时，构造函数的 prototype 属性会成为所有该构造函数创建的实例对象的原型。

-->

<script>
    var obj = {
        name:'lisi',
        sex:'男'
    }
    console.log(obj)

    obj.__proto__.age = 20  // obj 指向原型对象上动态添加了一个属性 age

    console.log(obj.name)
    console.log(obj.sex)
    console.log(obj.age)  // 当前对象中没有age属性  会沿着原型链查找  obj.__proto__


    console.log('------------------------')

    function student(name,age){
        this.name =name;
        this.age = age
    }

    console.log(student.prototype)   // {}  会成为所有该构造函数创建的实例对象的原型


    student.prototype.sex = '男'
    student.prototype.printInfo = function (){
        return   'my name is '+this.name+" age ="+this.age
    }
    var student1 = new student('lisi',20)
    console.log(student1.name)
    console.log(student1.age)
    console.log(student1.sex)

    console.log(student1.printInfo())


    var student2 = new student('wangwu',25)
    console.log(student2.printInfo())

</script>

</body>
</html>